package com.vca.service.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.PageInfo;
import com.vca.common.model.exhibition.ExhibitionScheduling;
import com.vca.common.request.*;
import com.vca.common.response.AdminHeaderResponse;
import com.vca.common.response.ExhibitionSchedulingAdminByIdResponse;
import com.vca.common.response.ExhibitionSchedulingAdminResponse;
import com.vca.common.vo.ExcelExSchedulingById;

import java.util.List;

/**
 * <p>
 * 课程排课表 服务类
 * </p>
 *
 * @author chenBing
 * @since 2022-11-03
 */
public interface ExhibitionSchedulingService extends IService<ExhibitionScheduling> {

    /**
     * 展览排课管理
     *
     * @param request
     * @param pageParamRequest
     * @return
     * @author Li
     * @date 2022/11/16 15:06
     */
    PageInfo getAdminList(SchedulingAdminListRequest request, PageParamRequest pageParamRequest);

    ExcelExSchedulingById getBookingDetail(String id, PageParamRequest pageParamRequest);

    /**
     * 展览排期日历列表
     *
     * @return
     * @author Li
     * @date 2022/11/21 11:19
     */
    List<ExhibitionSchedulingAdminResponse> getCalendarList(SchedulingAdminListRequest request);

    /**
     * 添加展览排期
     *
     * @return
     * @author Li
     * @date 2022/11/21 11:19
     */
    boolean addScheduling(SchedulingAddRequest<ExhibitionSchedulingAddRequest> request);

    /**
     * 修改展览排期
     *
     * @return
     * @author Li
     * @date 2022/11/21   11:19
     */
    boolean updateScheduling(ExhibitionSchedulingAddRequest request);

    /**
     * 跟据展览id查询排期
     *
     * @param exhibitionId
     * @return
     * @author Li
     * @date 2022/11/21 09:47
     */
    ExhibitionSchedulingAdminByIdResponse getAdminScheduling(Long exhibitionId);

    /**
     * 根据展览排期id删除排期
     *
     * @param schedulingId
     * @return
     * @author Li
     * @date 2022/11/21   15:02
     */
    boolean deleteScheduling(Long schedulingId);

    /**
     * @return
     * @author Li
     * @date 2022/11/24
     */
    List<AdminHeaderResponse> getHeader(String dateLimit);

    /**
     * 上架展览排期预约状态
     *
     * @param exhibitionSchedulingId 展览排期id
     * @return
     * @author Li
     * @date 2022/11/18 15:16
     */
    boolean onShell(Long exhibitionSchedulingId);

    /**
     * 下架展览排期预约状态
     *
     * @param exhibitionSchedulingId 展览排期id
     * @return
     * @author Li
     * @date 2022/11/18 15:16
     */
    boolean offShell(Long exhibitionSchedulingId);

    /**
     * 跟据展览id查询排期
     *
     * @param exhibitionId
     * @param pageParamRequest
     * @return
     * @author Li
     * @date 2022/11/21 09:47
     */
    PageInfo<ExhibitionSchedulingAdminByIdResponse> getListByExhibition(Long exhibitionId, PageParamRequest pageParamRequest);

    /**
     * @param schedulingIds
     * @return boolean
     * @description 批量删除排期
     * @author Li
     * @date 2022/11/29 11:28
     */
    boolean updateAll(List<Long> schedulingIds);

    /**
     * @param request
     * @return boolean
     * @description 取消展览排期
     * @methodName cancel
     * @author Li
     * @date 2022/12/28 16:18
     */
    boolean cancel(SchedulingCancelRequest request);

    /**
     * @Description:判断展览排期是否还有空余席位
     * @author:chenbing
     * @date 2023/9/18 16:59
     */
    boolean checkSchedulingQuta(Long mainId);

    /**
     * @Description:判断当前排期似乎否已经过了停止预约的时间
     * @author:chenbing
     * @date 2023/9/19 15:16
     */
    boolean checkSchedulingDate(ExhibitionScheduling exhibitionScheduling);
}
